// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token
// 同时，我们也可以在此使用getApp().globalData，如果你把token放在getApp().globalData的话，也是可以使用的
const install = (Vue, vm) => {
    // 覆写库的超时默认值
    // 现在，在超时前，所有请求都会等待 2.5 秒
    Vue.prototype.$e.http.defaults.timeout = 2500;
    // Vue.prototype.$e.http.defaults.baseURL = 'http://127.0.0.1:18888';
    Vue.prototype.$e.http.defaults.baseURL = 'http://115.159.64.54:18888';
    Vue.prototype.$e.http.defaults.headers.post['Content-Type'] = 'application/json';

    // 请求拦截，配置Token等参数
    Vue.prototype.$e.http.interceptors.request.use(function (config) {
        // 在发送请求之前做些什么
        config.headers["Token"] = vm.$store.state.vuex_token
        return config;
    }, function (error) {
        // 对请求错误做些什么
        return Promise.reject(error);
    })
    // 响应拦截，判断状态码是否通过
    Vue.prototype.$e.http.interceptors.response.use(function (response) {

        // 处理excel文件
        if (response.headers && (response.headers['content-type'] === 'application/x-msdownload'
            || response.headers['content-type'] === 'application/vnd.ms-excel'
            || response.headers['content-type'] === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')) {
            downloadUrl(response.request.responseURL)
            return
        }

        // 对响应数据做点什么
        let responseData = response.data
        let code = responseData.code
        let message = responseData.message
        let data = responseData.data || {}

        if (code === 3002) {
            Object.keys(data).forEach(k => {
                vm.$toast.center(k + ' ' + data[k]);
            });
        }

        if (code === 201) {
            let count = responseData.count || 0
            return [data, count, code, message, responseData];
        }

        //
        if (code === 10) {
            vm.$toast.center(message);
        }

        if (code === 400) {
            vm.$user.logout()
            vm.$e.jumpway.to(102)
            vm.$toast.center(message);
            return false
        }

        return [data, code, message, responseData];
    }, function (error) {
        // 对响应错误做点什么
        return Promise.reject(error);
    })
}

// download url
const downloadUrl = url => {
    let iframe = document.createElement('iframe')
    iframe.style.display = 'none'
    iframe.src = url
    iframe.onload = function () {
        document.body.removeChild(iframe)
    }
    document.body.appendChild(iframe)
}


export default {
    install
}
